/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Persistencia;

import cprincipal.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class RegistroTallerXml
{
    private Element root;
    private String fileLocation = "src/Archivos/registroTaller.xml";

    public RegistroTallerXml()
    {
        try
        {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = null;
            doc = builder.build(fileLocation);
            root = doc.getRootElement();
        }
        catch (JDOMException ex)
        {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        }
        catch (IOException ex)
        {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        }
    }

    private Element RegistroTallertoXmlElement(registroTaller nTaller)
    {
        Element Taller = new Element("taller");

        Element placa = new Element("placa");
        placa.setText(Integer.toString(nTaller.getPlaca()));
        Element nombreTaller = new Element("nombreTaller");
         nombreTaller.setText(nTaller.getNombreTaller());
        Element localidad = new Element("localidad");
         localidad.setText(nTaller.getLocalidad());
        Element fecha = new Element("fecha");
        fecha.setText(nTaller.getFecha());
        Element  nombreMec = new Element ("nombreMec");
         nombreMec.setText(nTaller.getNombreMec());
        Element  apellidoMec = new Element ("apellidoMec");
          apellidoMec.setText(nTaller.getApellidoMec());
        Element  placaEntrante = new Element ("placaEntrante");
         placaEntrante.setText(Integer.toString(nTaller.getPlacaEntrante()));
        Element  placaSaliente = new Element ("placaSaliente");
         placaSaliente.setText(Integer.toString(nTaller.getPlacaSaliente()));
          Element cambioPieza = new Element("cambioPieza");
        cambioPieza.setText(nTaller.getCambioPieza());


        Taller.addContent(placa);
        Taller.addContent(nombreTaller);
        Taller.addContent(localidad);
        Taller.addContent(fecha);
        Taller.addContent(nombreMec);
        Taller.addContent(apellidoMec);
        Taller.addContent(placaEntrante);
        Taller.addContent(placaSaliente);
        Taller.addContent(cambioPieza);


        return Taller;
    }

      private registroTaller RegistroTallerToObject(Element element) throws ParseException
      {
      registroTaller nTaller = new registroTaller ();

                 nTaller.setPlaca(Integer.parseInt(element.getChildText("placa")));
                 nTaller.setNombreTaller(element.getChildText("nombreTaller"));
                 nTaller.setLocalidad(element.getChildText("localidad"));
                 nTaller.setFecha(element.getChildText("fecha"));
                 nTaller.setNombreMec(element.getChildText("nombreMec"));
                 nTaller.setApellidoMec(element.getChildText("apellidoMec"));
                 nTaller.setPlacaEntrante(Integer.parseInt(element.getChildText("placaEntrante")));
                 nTaller.setPlacaSaliente(Integer.parseInt(element.getChildText("placaSaliente")));
                 nTaller.setCambioPieza(element.getChildText("cambioPieza"));


        return nTaller;
    }

         public static Element buscar(List raiz, String dato) {
        Iterator i = raiz.iterator();
        while (i.hasNext()) {
            Element e = (Element) i.next();
            if (dato.equals(e.getChild("placa").getText())) {
                return e;
            }
        }
        return null;
    }


    private boolean updateDocument() {
        try {
            XMLOutputter out = new XMLOutputter(org.jdom.output.Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream(fileLocation);
            out.output(root, file);
            file.flush();
            file.close();
            return true;
        } catch (Exception e) {
            System.out.println("error: " + e.getMessage());
            return false;
        }
    }

    public boolean agregarRegistroTaller(registroTaller nTaller) {
        boolean resultado = false;
        root.addContent(RegistroTallertoXmlElement(nTaller));
        resultado = updateDocument();
        return resultado;
    }



 public registroTaller buscarRegistroTaller(Integer dato) {
        Element aux = new Element("taller");
        List Talleres = this.root.getChildren("taller");

        while (aux != null) {
            aux = RegistroTallerXml.buscar(Talleres,  Integer.toString(dato));
            if (aux != null) {
                try {
                    return RegistroTallerToObject(aux);
                } catch (ParseException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
        return null;
    }

  public boolean actualizarRegistroTaller(registroTaller nTaller) {
        boolean resultado = false;
        Element aux = new Element("taller");
        List Talleres = this.root.getChildren("taller");
        while (aux != null) {
            aux = RegistroTallerXml.buscar(Talleres, Integer.toString(nTaller.getPlaca()));
            if (aux != null) {
                Talleres.remove(aux);
                resultado = updateDocument();
            }
        }
        agregarRegistroTaller(nTaller);
        return resultado;
    }

   public boolean borrarRegistroTaller(Integer dato) {
        boolean resultado = false;
        Element aux = new Element("taller");
        List Talleres = this.root.getChildren("taller");
        while (aux != null) {
            aux = RegistroTallerXml.buscar(Talleres, String.valueOf(dato));
            if (aux != null) {
                Talleres.remove(aux);
                resultado = updateDocument();
            }
        }
        return resultado;
    }


     public ArrayList<registroTaller> todasLosTalleres() {
        ArrayList<registroTaller> resultado = new ArrayList<registroTaller>();
        for (Object it : root.getChildren()) {
            Element xmlElem = (Element) it;
            try {
                resultado.add(RegistroTallerToObject(xmlElem));
            } catch (ParseException ex) {
                System.out.println(ex.getMessage());
            }
        }
        return resultado;
    }
}

